package DAO;

import java.sql.ResultSet;
import java.sql.SQLException;

import object.CourierObject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;

import POJO.Courier;

@Repository
public class CourierDao {
	@Autowired
	JdbcTemplate jdbcTemplate;
	
	/**
	 * 根据手机号码查询快递员信息（object）
	 * @param courierPhoneNum
	 * @return
	 * by zgy
	 */
	public CourierObject queryCourierInfo(int agentID,long courierPhoneNum){
		final CourierObject courier = new CourierObject();
		String getCourierInfoSQL="select * from courier c,express e where c.courier_express_id = express_id and c.courier_status = 0 and e.express_agent_id = ? and c.courier_mobileNum = ?;";
		Object[] params=new Object[]{agentID,courierPhoneNum};
		jdbcTemplate.query(getCourierInfoSQL,params, new RowCallbackHandler(){
			public void processRow(ResultSet rs) throws SQLException {
				courier.setCourierAddr(rs.getString("courier_address"));
				courier.setCourierCardSeq(rs.getString("courier_sernum"));
				courier.setCourierIDCard(rs.getString("courier_IDCard"));
				courier.setCourierName(rs.getString("courier_name"));
				courier.setExpressBranchId(String.valueOf(rs.getInt("courier_express_id")));
				courier.setExpressCompanyId(String.valueOf(rs.getInt("express_company_id")));
			}
		});		
		return courier;
	}
	
	/**
	 * 通过RFID来查找快递员
	 * @param RFID
	 * @return
	 */
	public Courier getCourierInfoByRFID(String RFID){
		final Courier courier=new Courier();
		String getCourierInfoSQL="select courier_id,courier_company,courier_express_id,courier_errorRate,courier_status,courier_mobileNum from courier where courier_RFID=? AND courier_status=0 ";
		Object[] params=new Object[]{RFID};
		jdbcTemplate.query(getCourierInfoSQL,params, new RowCallbackHandler(){
			public void processRow(ResultSet rs) throws SQLException {
				courier.setCourier_company(rs.getString("courier_company"));
				courier.setCourierID(rs.getInt("courier_id"));
				courier.setExpressId(rs.getInt("courier_express_id"));
				courier.setErrorRate(rs.getBigDecimal("courier_errorRate"));
				courier.setStatus(rs.getInt("courier_status"));
				courier.setPhoneNum(rs.getObject("courier_mobileNum").toString());
			}
		});		
		
		if(courier.getCourierID()==-1){
			return null;
		}else{
			return courier;
		}
	}
	/**
	 * 通过手机号和密码查找快递员
	 * @param phoneNum
	 * @param password
	 * @return
	 */
	public Courier getCourierByPhone(String phoneNum,String password){
		final Courier courier=new Courier();
		String getCourierInfoSQL="select courier_id,courier_company,courier_express_id,courier_errorRate,courier_status,courier_mobileNum from courier where courier_mobileNum=? AND courier_psd=? AND courier_status=0";
		Object[] params=new Object[]{phoneNum,password};
		jdbcTemplate.query(getCourierInfoSQL,params, new RowCallbackHandler(){
			public void processRow(ResultSet rs) throws SQLException {
				courier.setCourier_company(rs.getString("courier_company"));
				courier.setCourierID(rs.getInt("courier_id"));
				courier.setExpressId(rs.getInt("courier_express_id"));
				courier.setErrorRate(rs.getBigDecimal("courier_errorRate"));
				courier.setStatus(rs.getInt("courier_status"));
				courier.setPhoneNum(rs.getObject("courier_mobileNum").toString());
			}
		});		
		
		if(courier.getCourierID()==-1){
			return null;
		}else{
			return courier;
		}
	}
	/**
	 * 根据ID获取快递员
	 * @param courierID
	 * @return
	 */
	public Courier getCourierByID(int courierID){
		final Courier courier=new Courier();
		String getCourierInfoSQL="select * from courier where courier_id=? AND courier_status=0";
		Object[] params=new Object[]{courierID};
		jdbcTemplate.query(getCourierInfoSQL,params, new RowCallbackHandler(){
			public void processRow(ResultSet rs) throws SQLException {
				courier.setCourier_company(rs.getString("courier_company"));
				courier.setCourierID(rs.getInt("courier_id"));
				courier.setExpressId(rs.getInt("courier_express_id"));
				courier.setErrorRate(rs.getBigDecimal("courier_errorRate"));
				courier.setStatus(rs.getInt("courier_status"));
				courier.setPhoneNum(rs.getObject("courier_mobileNum").toString());
			}
		});		
		
		if(courier.getCourierID()==-1){
			return null;
		}else{
			return courier;
		}
	}
	
	/**
	 * 注册快递员,带RFID
	 * @param courier
	 * @return
	 */
	public boolean saveCourierWithRFID(Courier courier){
		String saveCourierSql;
		Object[] params;
		if(courier.getRFID()!=null){
			 saveCourierSql="INSERT INTO `courier` (`courier_mobileNum`, `courier_psd`, `courier_company`, `courier_RFID`) " +
												"VALUES (?,?,?,?);";
			 params=new Object[]{courier.getPhoneNum(),courier.getPassword(),courier.getCourier_company(),courier.getRFID()};
		}else{
			 saveCourierSql="INSERT INTO `courier` (`courier_mobileNum`, `courier_psd`, `courier_company`) " +
					"VALUES (?,?,?);";
			 params=new Object[]{courier.getPhoneNum(),courier.getPassword(),courier.getCourier_company()};
		}

		int result=jdbcTemplate.update(saveCourierSql,params);
		if(result==1){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 修改快递员密码
	 * @param courier
	 * @return
	 */
	public boolean changeCourierPassword(Courier courier){
		String changeCourierPasswordSql;
		Object[] params;
		if(courier.getRFID()==null){
		 changeCourierPasswordSql="UPDATE `courier` SET `courier_psd`=? WHERE courier_mobileNum=?;";
		 params=new Object[]{courier.getPassword(),courier.getPhoneNum()};
		}else{
			 changeCourierPasswordSql="UPDATE `courier` SET `courier_psd`=?,`courier_RFID`=? WHERE courier_mobileNum=?;";
			 params=new Object[]{courier.getPassword(),courier.getRFID(),courier.getPhoneNum()};
		}
		try {
			int result=jdbcTemplate.update(changeCourierPasswordSql,params);
			if(result==1){
				return true;
			}else{
				return false;
			}
		} catch (Exception e) {
			// TODO: handle exception
			return false;
		}
	}
	/**
	 * 根据手机号判断是否存在快递员
	 * @param phoneNum
	 * @return
	 */
	public boolean isExtCourierByPhoneNum(String phoneNum){
		String isExtCourierByPhoneNumSql="SELECT count(*) FROM courier where courier_mobileNum=?;";
		Object[] params=new Object[]{phoneNum};
		try {
			int result=jdbcTemplate.queryForInt(isExtCourierByPhoneNumSql,params);
			if(result==1){
				return true;
			}else{
				return false;
			}
		} catch (Exception e) {
			// TODO: handle exception
			return false;
		}
	}

	public String returnCompanynameByCourierId(int courierId){
		String returnCompanynameByCourierId="SELECT courier_company FROM courier where courier_id=?;";
		Object[] params=new Object[]{courierId};
		return jdbcTemplate.queryForObject(returnCompanynameByCourierId,params,String.class);
	}
	
}
